import Vue from "vue"
import VueRouter from "vue-router"
//引入组件
import routes  from "./routes.js"
Vue.use(VueRouter)
//原型上修改push方法，因为push在第二点击后发现地址没会报错弹出警告
const originPush = VueRouter.prototype.push //先将之前的push方法储存到一个变量中 push在历史记录中追加

const originRepace = VueRouter.prototype.replace //路由替换当前历史记录

//修改VueRouter原型上的push方法 ，用于解决重复跳转时报错的问题

VueRouter.prototype.push = function (location,okCallBack,errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //上面的判断成立的话就表示没有传递这两个参数
    // 通过 call()，您能够使用属于另一个对象的方法。
    //location身上添加了个推出报错的方法，这就相当于给原型身上添加了个新的方法，这个方法的作用是当okCallBack和errCallBack没有传值的时候，就是说路径地址没有改变的时候，本来会报错，但是通过修改路由原型上的方法只要没有改变就不会报错了，会通过location身上的方法推出错误,否则的话就给push身上添加location,okCallBack,errCallBack ，这就表示okCallBack,errCallBack有值，路径改变了就不会报错，
    originPush.call(this,location).catch(()=>{})
  } else {
    originPush.call(this,location,okCallBack,errCallBack)
  }
}

// 修改VueRouter原型上的replace 用于解决重复跳转时报错的问题
VueRouter.prototype.replace = function (location,okCallBack,errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //上面的判断成立的话就表示没有传递这两个参数
    // 通过 call()，您能够使用属于另一个对象的方法。
    //location身上添加了个推出报错的方法，这就相当于给原型身上添加了个新的方法，这个方法的作用是当okCallBack和errCallBack没有传值的时候，就是说路径地址没有改变的时候，本来会报错，但是通过修改路由原型上的方法只要没有改变就不会报错了，会通过location身上的方法推出错误,否则的话就给replace身上添加location,okCallBack,errCallBack ，这就表示okCallBack,errCallBack有值，路径改变了就不会报错，
    originRepace.call(this,location).catch(()=>{})
  } else {
    originRepace.call(this,location,okCallBack,errCallBack)
  }
}





//引入路由
// import Home from '@/views/Home'

// // import Detail from '@/views/Detail'

// import Login from '@/views/Login'
// import Register from '@/views/Register'
// import Seach from '@/views/Seach'


const router = new VueRouter({ 
  mode: "history" ,//设置路由模式
  routes,

  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  }
})
export default router